package com.innjia.sys.entity;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.innjia.base.utils.DateUtils;



/**
 * 
 * 
 * @author innjia
 * @email innjia@innjia.com
 * @date 2017-11-20 15:18:25
 */
public class ContractInfoEntity implements Serializable {
	private static final long serialVersionUID = 1L;
	
	//合同ID
	private String id;
	//合同编码，支付宝返回的电子合约号
	private String contractNo;
	//合同状态（0：待签约、1：已签约、2：已作废）
	private String contractStatus;
	//房源id
	private String houseId;
	//甲方签约认证唯一标识，支付宝返回
	private String bizNoA;
	//甲方签约结果，0:失败，1：成功
	private String successA;
	//甲方签约时间
	private Date signTimeA;
	//乙方签约认证唯一标识，支付宝返回
	private String bizNoB;
	//乙方签约结果，0:成功，1：失败
	private String successB;
	//乙方签约时间
	private Date signTimeB;
	//房源编码
	private String houseCode;
	//租客ID
	private String tenantId;
	//租客姓名
	private String tenantName;
	//租客手机号
	private String tenantPhone;
	//租客身份证号
	private String tenantIdCard;
	//合同有效期起始时间
	private Date contractValidityStartTime;
	//合同有效期截止时间
	private Date contractValidityEndTime;
	//租期，单位月，根据合同有效时间计算得出
	private Integer totalMonth;
	//每月租金，默认房源表中租金
	private BigDecimal monthRent;
	//总租金
	private BigDecimal totalRent;
	//支付方式，默认房源表中付款方式
	private String payWay;
	//租赁方式，整租或合租
	private String leaseWay;
	//租赁地址
	private String leaseAddress;
	//提前多少天交租的天数
	private Integer advanceDays;
	//交租日期，10：表示每月10号交租
	private Integer payRentDate;
	//押金
	private BigDecimal deposit;
	//网签编码
	private String netSignCode;
	//创建初始合同pdf文件id
	private String contractFile;
	//甲方签名后合同文件id
	private String partyAContract;
	//乙方签名后合同文件id
	private String partyBContract;
	//房东id
	private String landlordId;
	//房东姓名
	private String landlordName;
	//房东手机号
	private String landlordPhone;
	//房东身份证
	private String landlordIdCard;
	//合同终止时间
	private Date contractTerminationDate;
	//合同创建时间
	private Date createTime;
	//合同更新时间
	private Date updateTime;
	//合同创建人id
	private String contractCreatorId;
	//补充信息
	private String remark;
	//签约时效截止时间
	private Date signDeadlineTime;
	//创建人名称
	private String contractCreatorName;
	//房东证件类型 默认身份证
	private String andlordType= "CertCard";
	//租客证件类型 默认身份证
	private String tenantType= "CertCard";

	//区块链TransactionDO返回唯一性
	private String txHash;

	//"0"私"1"公房
	private String publicAndPrivate="0";

	//保存电子合约的引用
	private String url;
	//校验位
	private String checksum;
	//用于合约续签或作废的引用
	private String reference;
	//加密算法，默认密文分享存证
	private String algorithm;



	/*
	 * 合同信息转Map，字段名为name,字段值为value
	 */
	public Map<String, Object> getMapDatas(Map<String, Object> map) throws Exception {
		if(map == null) {
			map = new HashMap<String, Object>();
		}
		Class<? extends ContractInfoEntity> clazz = this.getClass();
		Field[] fields = clazz.getDeclaredFields();
		if(fields != null && fields.length > 0) {
			for(Field field : fields) {
				String fieldName = field.getName();
				if(fieldName.equals("serialVersionUID")) {
					continue;
				}
				String fieldType = field.getType().getName();
				if ("java.util.Date".equals(fieldType)) {
					map.put(fieldName,  DateUtils.format((Date)field.get(this), "yyyy-MM-dd"));
				} else {
					map.put(fieldName, field.get(this));
				}
			}
		}
		return map;
	}

	/**
	 * 设置：合同ID
	 */
	public void setId(String id) {
		this.id = id;
	}
	/**
	 * 获取：合同ID
	 */
	public String getId() {
		return id;
	}
	/**
	 * 设置：合同编码，支付宝返回的电子合约号
	 */
	public void setContractNo(String contractNo) {
		this.contractNo = contractNo;
	}
	/**
	 * 获取：合同编码，支付宝返回的电子合约号
	 */
	public String getContractNo() {
		return contractNo;
	}
	/**
	 * 设置：合同状态（0：待签约、1：已签约、2：已作废）
	 */
	public void setContractStatus(String contractStatus) {
		this.contractStatus = contractStatus;
	}
	/**
	 * 获取：合同状态（0：待签约、1：已签约、2：已作废）
	 */
	public String getContractStatus() {
		return contractStatus;
	}
	/**
	 * 设置：房源id
	 */
	public void setHouseId(String houseId) {
		this.houseId = houseId;
	}
	/**
	 * 获取：房源id
	 */
	public String getHouseId() {
		return houseId;
	}
	/**
	 * 设置：甲方签约认证唯一标识，支付宝返回
	 */
	public void setBizNoA(String bizNoA) {
		this.bizNoA = bizNoA;
	}
	/**
	 * 获取：甲方签约认证唯一标识，支付宝返回
	 */
	public String getBizNoA() {
		return bizNoA;
	}
	/**
	 * 设置：乙方签约认证唯一标识，支付宝返回
	 */
	public void setBizNoB(String bizNoB) {
		this.bizNoB = bizNoB;
	}
	/**
	 * 获取：乙方签约认证唯一标识，支付宝返回
	 */
	public String getBizNoB() {
		return bizNoB;
	}
	/**
	 * 设置：房源编码
	 */
	public void setHouseCode(String houseCode) {
		this.houseCode = houseCode;
	}
	/**
	 * 获取：房源编码
	 */
	public String getHouseCode() {
		return houseCode;
	}
	/**
	 * 设置：租客ID
	 */
	public void setTenantId(String tenantId) {
		this.tenantId = tenantId;
	}
	/**
	 * 获取：租客ID
	 */
	public String getTenantId() {
		return tenantId;
	}
	/**
	 * 设置：租客姓名
	 */
	public void setTenantName(String tenantName) {
		this.tenantName = tenantName;
	}
	/**
	 * 获取：租客姓名
	 */
	public String getTenantName() {
		return tenantName;
	}
	/**
	 * 设置：租客手机号
	 */
	public void setTenantPhone(String tenantPhone) {
		this.tenantPhone = tenantPhone;
	}
	/**
	 * 获取：租客手机号
	 */
	public String getTenantPhone() {
		return tenantPhone;
	}
	/**
	 * 设置：租客身份证号
	 */
	public void setTenantIdCard(String tenantIdCard) {
		this.tenantIdCard = tenantIdCard;
	}
	/**
	 * 获取：租客身份证号
	 */
	public String getTenantIdCard() {
		return tenantIdCard;
	}
	/**
	 * 设置：合同有效期起始时间
	 */
	public void setContractValidityStartTime(Date contractValidityStartTime) {
		this.contractValidityStartTime = contractValidityStartTime;
	}
	/**
	 * 获取：合同有效期起始时间
	 */
	public Date getContractValidityStartTime() {
		return contractValidityStartTime;
	}
	/**
	 * 设置：合同有效期截止时间
	 */
	public void setContractValidityEndTime(Date contractValidityEndTime) {
		this.contractValidityEndTime = contractValidityEndTime;
	}
	/**
	 * 获取：合同有效期截止时间
	 */
	public Date getContractValidityEndTime() {
		return contractValidityEndTime;
	}
	/**
	 * 设置：租期，单位月，根据合同有效时间计算得出
	 */
	public void setTotalMonth(Integer totalMonth) {
		this.totalMonth = totalMonth;
	}
	/**
	 * 获取：租期，单位月，根据合同有效时间计算得出
	 */
	public Integer getTotalMonth() {
		return totalMonth;
	}
	/**
	 * 设置：每月租金，默认房源表中租金
	 */
	public void setMonthRent(BigDecimal monthRent) {
		this.monthRent = monthRent;
	}
	/**
	 * 获取：每月租金，默认房源表中租金
	 */
	public BigDecimal getMonthRent() {
		return monthRent;
	}
	/**
	 * 设置：总租金
	 */
	public void setTotalRent(BigDecimal totalRent) {
		this.totalRent = totalRent;
	}
	/**
	 * 获取：总租金
	 */
	public BigDecimal getTotalRent() {
		return totalRent;
	}
	/**
	 * 设置：支付方式，默认房源表中付款方式
	 */
	public void setPayWay(String payWay) {
		this.payWay = payWay;
	}
	/**
	 * 获取：支付方式，默认房源表中付款方式
	 */
	public String getPayWay() {
		return payWay;
	}
	/**
	 * 设置：租赁方式，整租或合租
	 */
	public void setLeaseWay(String leaseWay) {
		this.leaseWay = leaseWay;
	}
	/**
	 * 获取：租赁方式，整租或合租
	 */
	public String getLeaseWay() {
		return leaseWay;
	}
	/**
	 * 设置：租赁地址
	 */
	public void setLeaseAddress(String leaseAddress) {
		this.leaseAddress = leaseAddress;
	}
	/**
	 * 获取：租赁地址
	 */
	public String getLeaseAddress() {
		return leaseAddress;
	}
	/**
	 * 设置：交租日期，10：表示每月10号交租
	 */
	public void setPayRentDate(Integer payRentDate) {
		this.payRentDate = payRentDate;
	}
	/**
	 * 获取：交租日期，10：表示每月10号交租
	 */
	public Integer getPayRentDate() {
		return payRentDate;
	}
	/**
	 * 设置：押金
	 */
	public void setDeposit(BigDecimal deposit) {
		this.deposit = deposit;
	}
	/**
	 * 获取：押金
	 */
	public BigDecimal getDeposit() {
		return deposit;
	}
	/**
	 * 设置：网签编码
	 */
	public void setNetSignCode(String netSignCode) {
		this.netSignCode = netSignCode;
	}
	/**
	 * 获取：网签编码
	 */
	public String getNetSignCode() {
		return netSignCode;
	}
	/**
	 * 设置：创建初始合同pdf文件id
	 */
	public void setContractFile(String contractFile) {
		this.contractFile = contractFile;
	}
	/**
	 * 获取：创建初始合同pdf文件id
	 */
	public String getContractFile() {
		return contractFile;
	}
	/**
	 * 设置：甲方签名后合同文件id
	 */
	public void setPartyAContract(String partyAContract) {
		this.partyAContract = partyAContract;
	}
	/**
	 * 获取：甲方签名后合同文件id
	 */
	public String getPartyAContract() {
		return partyAContract;
	}
	/**
	 * 设置：乙方签名后合同文件id
	 */
	public void setPartyBContract(String partyBContract) {
		this.partyBContract = partyBContract;
	}
	/**
	 * 获取：乙方签名后合同文件id
	 */
	public String getPartyBContract() {
		return partyBContract;
	}
	/**
	 * 设置：房东id
	 */
	public void setLandlordId(String landlordId) {
		this.landlordId = landlordId;
	}
	/**
	 * 获取：房东id
	 */
	public String getLandlordId() {
		return landlordId;
	}
	/**
	 * 设置：房东姓名
	 */
	public void setLandlordName(String landlordName) {
		this.landlordName = landlordName;
	}
	/**
	 * 获取：房东姓名
	 */
	public String getLandlordName() {
		return landlordName;
	}
	/**
	 * 设置：房东手机号
	 */
	public void setLandlordPhone(String landlordPhone) {
		this.landlordPhone = landlordPhone;
	}
	/**
	 * 获取：房东手机号
	 */
	public String getLandlordPhone() {
		return landlordPhone;
	}
	/**
	 * 设置：房东身份证
	 */
	public void setLandlordIdCard(String landlordIdCard) {
		this.landlordIdCard = landlordIdCard;
	}
	/**
	 * 获取：房东身份证
	 */
	public String getLandlordIdCard() {
		return landlordIdCard;
	}
	/**
	 * 设置：合同终止时间
	 */
	public void setContractTerminationDate(Date contractTerminationDate) {
		this.contractTerminationDate = contractTerminationDate;
	}
	/**
	 * 获取：合同终止时间
	 */
	public Date getContractTerminationDate() {
		return contractTerminationDate;
	}
	/**
	 * 设置：合同创建时间
	 */
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	/**
	 * 获取：合同创建时间
	 */
	public Date getCreateTime() {
		return createTime;
	}
	/**
	 * 设置：合同更新时间
	 */
	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
	/**
	 * 获取：合同更新时间
	 */
	public Date getUpdateTime() {
		return updateTime;
	}
	/**
	 * 设置：合同创建人id
	 */
	public void setContractCreatorId(String contractCreatorId) {
		this.contractCreatorId = contractCreatorId;
	}
	/**
	 * 获取：合同创建人id
	 */
	public String getContractCreatorId() {
		return contractCreatorId;
	}
	/**
	 * 设置：补充信息
	 */
	public void setRemark(String remark) {
		this.remark = remark;
	}
	/**
	 * 获取：补充信息
	 */
	public String getRemark() {
		return remark;
	}

	public String getContractCreatorName() {
		return contractCreatorName;
	}

	public void setContractCreatorName(String contractCreatorName) {
		this.contractCreatorName = contractCreatorName;
	}

	public String getSuccessA() {
		return successA;
	}

	public void setSuccessA(String successA) {
		this.successA = successA;
	}

	public String getSuccessB() {
		return successB;
	}

	public void setSuccessB(String successB) {
		this.successB = successB;
	}

	public Integer getAdvanceDays() {
		return advanceDays;
	}

	public void setAdvanceDays(Integer advanceDays) {
		this.advanceDays = advanceDays;
	}

	/**
	 * 设置：甲方签约时间
	 */
	public void setSignTimeA(Date signTimeA) {
		this.signTimeA = signTimeA;
	}
	
	/**
	 * 获取：甲方签约时间
	 */
	public Date getSignTimeA() {
		return signTimeA;
	}
	
	/**
	 * 设置：乙方签约时间
	 */
	public void setSignTimeB(Date signTimeB) {
		this.signTimeB = signTimeB;
	}
	/**
	 * 获取：乙方签约时间
	 */
	public Date getSignTimeB() {
		return signTimeB;
	}
	/**
	 * 设置：签约时效截止时间
	 */
	public void setSignDeadlineTime(Date signDeadlineTime) {
		this.signDeadlineTime = signDeadlineTime;
	}
	/**
	 * 获取：签约时效截止时间
	 */
	public Date getSignDeadlineTime() {
		return signDeadlineTime;
	}

	public String getAndlordType() {
		return andlordType;
	}

	public void setAndlordType(String andlordType) {
		this.andlordType = andlordType;
	}

	public String getTenantType() {
		return tenantType;
	}

	public void setTenantType(String tenantType) {
		this.tenantType = tenantType;
	}

	public String getTxHash() {
		return txHash;
	}

	public void setTxHash(String txHash) {
		this.txHash = txHash;
	}

	public String getPublicAndPrivate() {
		return publicAndPrivate;
	}

	public void setPublicAndPrivate(String publicAndPrivate) {
		this.publicAndPrivate = publicAndPrivate;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getChecksum() {
		return checksum;
	}

	public void setChecksum(String checksum) {
		this.checksum = checksum;
	}

	public String getReference() {
		return reference;
	}

	public void setReference(String reference) {
		this.reference = reference;
	}

	public String getAlgorithm() {
		return algorithm;
	}

	public void setAlgorithm(String algorithm) {
		this.algorithm = algorithm;
	}
}
